草庐IT

PostgreSQL 别名

全部标签

c++ - 严格的别名规则和 std::copy

我有一个字符数组,其中包含我需要解释为“int”的“序列化”数据。以前我只是将指向位置的指针转换到“int*”并取消引用以获取int数据,但尽管它对我来说效果很好,但它打破了严格的别名规则,因此出现了未定义的行为。所以现在我使用memcpy将字节复制到一个int中,我相信这不是未定义的行为。但是我可以使用“std::copy”吗?例如chardata[10]={0,1,2,3,4,5,6,7,8,9};inti;std::copy(data,data+sizeof(int),reinterpret_cast(&i));这本身并没有违反严格的别名规则,但任何可能的实现都会这样做.....

c++ - 模板别名在模板类模板方法的参数中不起作用

当我声明参数类型由模板别名指定的模板类的模板方法时,我收到编译错误。如果我将模板类更改为一个类,它会编译。如果我将模板别名替换为实际类型(此处为Templ),它也会编译。为什么它不起作用,当它是模板类并且参数类型是模板别名时?编译器为gcc4.8.0版(Ubuntu/Linaro4.8.0-2ubuntu2~12.04)。templateclassTempl>usingBool=Templ;templateclassFoo{private:public:templateclassTempl>voidmethod(BoolboolTempl);};templatetemplateclas

c++ - FlatBuffers 是否以某种方式避免了严格的别名?

我最近一直在研究FlatBuffers库。我正在寻找评估它以用于我的项目。看着flatbuffers.h,我想知道是否违反了strict-aliasingrule如果它确实考虑了严格的别名,有人可以解释它是如何做到的吗?在以前的项目中,我很难学到这个规则,优化会产生难以发现的细微错误。我一直在使用placementnewoperator避免使用编译器标志来解决这个问题。链接:flatbuffers.hstrict-aliasingruleplacementnewoperator 最佳答案 目前,读取FlatBuffer完全是只读的事

c++ - 带有自定义删除器的 std::shared_ptr 的 Typedef 别名

我想为std::shared_ptr创建别名使用自定义删除器。此代码有效,但仅适用于唯一指针。我收到有关标有[1]的行的无效模板参数数量的错误。我注意到std::unique_ptr的模板和ctor参数和std::shared_ptr与所列不同here和here我注意到这个问题可能与this重复,但我不知道如何解决我的问题#include#includetemplatestructDeleter{voidoperator()(T*p)constnoexcept{p->Drop();//SFINAE};};templateusingmy_unique_ptr=std::unique_pt

c++ - 如何模拟模板别名的推导指南?

考虑以下几点:templatestructmy_array{Tvalues[N];};我们可以提供扣费指南my_array,像templatemy_array(Ts...)->my_array,sizeof...(Ts)>;现在,假设my_array有一些非常特殊的意义(但只是意义,接口(interface)和实现保持不变),所以我们想给它一个更合适的名字:templateusingspecial=my_array;Itturnsout推导指南根本不适用于模板别名,即这会产生编译错误:floatx,y;my_arraya{x,y};//worksspecialb{x,y};//does

c++ - 我什么时候可以打破别名规则?

我收到此警告。我想要定义的行为,但我想保持这段代码不变。我什么时候可以违反别名规则?warning:dereferencingtype-punnedpointerwillbreakstrict-aliasingrules[-Wstrict-aliasing]String是我自己的字符串,它是一个POD。此代码是从C调用的。S可能是一个int。String几乎就是structString{RealString*s;}但模板化和辅助函数。我做了一个静态断言来确保String是一个pod,是4bytes和int是4bytes。我还写了一个断言,它检查所有指针是否>=NotAPtr。它在我的新

c++ - g++ 4.7 严格别名检查无效

当我用g++4.7编译以下代码时。g++-Wall-fstrict-aliasing我会在第一次转换时收到警告:警告:取消引用类型双关指针将破坏严格的别名规则[-Wstrict-aliasing]第二次转换很好,没有任何警告。任何人都可以帮助我理解为什么在第一次转换时发出警告吗?intmain(){chara[16];char*p=&a[0];//inti=*((int*)(&a[0]));//badintj=*((int*)(p));//okreturn0;} 最佳答案 Thesecondcastisfinewithoutanyw

c++ - 正确别名 vector

我在别处找不到答案,所以我想我只需要问这个:我正在尝试为一个vector(其中存储了int指针)获取一个别名,如下所示:voidconversion(Engine*ENGINES){//TheEngineclasshasavectorofint*asapublicdatamembercalledSITEfor(inti=0;i*current=&(ENGINES[i].SITE);//theproblematiclineintj_max=current->size();cout问题是*current[a][b]的索引似乎发生了反转。我希望能够将current用作法线vector,但现在

c++ - 类型别名和不完整的类型

我可能已经超出了解决本应是一个简单问题的范围。我在这里开始这个问题:Gettingtypeofbaseclassatcompiletime基本上我试图让类管理它自己的指针类型。我正在包装一个C库,其中一些结构中嵌入了引用计数,而另一些则没有。那些没有的,我想使用shared_ptr。那些这样做,我想使用intrusive_ptr。我想避免依赖程序员的智慧来确保使用正确的包装器。最终,我想添加更多依赖于此行为的功能,但我还没有做到这一点。@Yakk提出了一个使用模板类型别名的有趣解决方案,我已经尝试实现它。不幸的是,我让自己陷入了一个似乎无法解决循环引用以使编译器满意的境地。我收到指向“

PostgreSQL 连接数过多报错(too many clients already)

解决PostgreSQL连接数过多报错的情景一、问题描述在使用Navicat连接PostgreSQL数据库时,突然遭遇到了一个报错:“FATAL:sorry,toomanyclientsalready”。这一错误提示表明数据库连接数已经达到上限,无法再创建新连接。为了解决这一问题,我采取了一系列查询和配置调整的步骤,从数据库和程序连接池两个方面入手。数据库版本和程序信息:数据库版本:PostgreSQL11.5查看PostgreSQL版本SELECTversion();程序语言和框架:Java和SpringBoot二、分析问题1.数据库层面1.1查看连接数和连接状态通过查询数据库连接数量和连接